const WebSocket = require('ws')
const path = require('path')
const {getFileData} = require('../utils/file_utils')
// 创建WebSocket服务端对象 绑定的端口是9998
const wss = new WebSocket.Server({
    port: 9998
})

// 服务端开启监听的函数
module.exports.listen = () => {
    // 对客户端的连接事件进行监听
    // client: 代表的是客户端的连接socket对象
    wss.on('connection', client => {
        console.log('有客户端连接成功')

        // 对客户端的连接对象进行message事件的监听
        // msg: 由客户端发给服务端的数据
        client.on('message', async msg => {
            console.log('客户端发给服务端的数据: ' + msg)
            let payload = JSON.parse(msg)
            const {action, socketType, chartName, value} = payload
            console.log(action, socketType, chartName, value)
            // 判断action是否为getData
            if (action === 'getData') {
                let filePath = '../data/' + chartName + '.json'
                filePath = path.join(__dirname, filePath)
                // 获取的图表数据
                const data = await getFileData(filePath)
                // 返回的数据增加一个data字段，存放所获取的图表数据
                payload.data = data

                // 发送给客户端
                client.send(JSON.stringify(payload))
            } else {
                // 若action不为getData
                // 即将接受的数据原封不动的转发给连接的所有的客户端
                // wss.clients 是所有已连接的客户端 是一个数组
                wss.clients.forEach(client => {
                    client.send(msg)
                })
            }
            // 由服务端向客户端发送数据
            // client.send('Hello Socket From Backed')
        })
    })
}
